import observe from './observe'

export default function defineReactive(data, key, val) {
  console.log('我是defineReactive',data,key);
  if(arguments.length == 2){
    val = data[key]
  }
  // 子元素要进行observe,至此形成了递归，这个递归不是函数自己调用自己，而是多个函数、类的循环调用
  let childOb =  observe(val)

  Object.defineProperty(data, key, {
    // 可枚举
    enumerable: true,
    // 可以被配置，比如 DELETE
    configurable: true,
    // getter
    get() {
      console.log('你试图访问' + key + '属性')
      return val
    },
    // setter
    set(newValue) {
      console.log('你试图修改' + key + '属性，新值为：' + newValue)
      if (val === newValue) return
      val = newValue
      // 当设置了薪资，这个新值也要被observe
      childOb =  observe(newValue)
    },
  })
}